#ifndef LOGICMODEL_H
#define LOGICMODEL_H

//游戏逻辑模型类，逻辑和界面分离

#include<vector>
enum BlockState//方块状态类
{
    Original, //原始状态
    Open,     //翻开
    Marked,   //标记
    Bomb,     //雷爆炸
    Wrong_Bomb//错误标记
};
struct MineBlock
{
    int valueFlag;//数值范围：0-8，是其周围地雷可能存在的数量；若为-1则为地雷
    BlockState CurState;//当前状态
};
enum GameLevel
{
    Basic,
    Medium,
    Difficult
};
enum GameState
{
    In_progress, //进行中
    Fault,       //错误标记
    Over,        //输
    Win          //赢
};
//设置默认参数
const int kRow = 15;
const int kCol = 20;
const int kMineCount = 50;
const int kTime = 0;

class GameLogicModel
{
public:
    GameLogicModel();
    virtual ~GameLogicModel();

public:
    void OpenBlock(int m,int n);//翻开第m行第n列的方块
    void MarkMine(int m,int n);//标记为雷
    void StartGame(int row=kRow,int col=kCol,int MineCount=kMineCount,GameLevel Level=Medium);//初始化游戏，默认为中等难度
    void Restart();//重开
    void CheckRes();//检查结果，即游戏输赢

public:
    std::vector<std::vector<MineBlock>>Map;//游戏地图
    int mRow;//地图行数
    int mCol;//列数
    int totalMineCount;//总雷数
    int CurMineCount;//当前雷数
    int timerSeconds;//计时

    GameState gameState;//当前游戏状态
    GameLevel gameLevel;//当前游戏难度
};









#endif // LOGICMODEL_H
